#include <iostream>
using namespace std;

// int main()
//{
//     int i = 0;
//     int& ri = i;
//     const int ci = 42;   // 顶层const
//     int* const p1 = &i;  // 顶层const
//     const int* p2 = &ci; // 底层const
//     const int& ri1 = ci; // 底层const
//     const int& ri2 = i;  // 底层const
//
//     auto j = ri;        // j类型为int
//     j++;
//
//     auto k = i;          // k类型为int
//     k++;
//
//     auto r1 = ci;        // r1类型为int，忽略掉顶层const
//     r1++;
//
//     auto r2 = p1;        // r2类型为int*，忽略掉顶层const
//     r2++;
//
//     auto r3 = p2;        // r3类型为const int*，保留底层const
//     // (*r3)++;          // 报错
//
//     auto r4 = ri1;       // r4类型为int，因为ri1是ci的别名，ci本身的const是一个顶层const被忽略掉了
//     r4++;
//     auto r5 = ri2;       // r5类型为int
//     r5++;
//
//     const auto r7 = ci;  // r7类型为const int
//     auto& r8 = ri1;      // r8类型为const int&
//     auto& r9 = ri2;      // r9类型为const int&
//     auto& r10 = ci;      // r10类型为const int&
//     auto& r11 = ri;      // r11类型为int&
//     //r7++;              // 报错
//     //r8++;              // 报错
//     //r9++;              // 报错
//     //r10++;             // 报错
//     r11++;
//
//     return 0;
// }